Computer Programming Fortran এ OOP এর ধারণা গাইড ও নোট

223

ফোরট্রানে Object-Oriented Programming (OOP) এর ধারণা

ফোরট্রান একটি প্রাথমিকভাবে প্রক্রিয়াভিত্তিক ভাষা, তবে আধুনিক ফোরট্রান সংস্করণগুলি (বিশেষ করে Fortran 90 এবং এর পরবর্তী সংস্করণ) অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) সমর্থন করতে সক্ষম হয়েছে। ফোরট্রানে OOP ধারণাটি প্রয়োগ করা সম্ভব এবং এতে ক্লাস, ইনহেরিট্যান্স, পলিমরফিজম, এবং এনক্যাপসুলেশন এর মতো মৌলিক বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে।

ফোরট্রানে OOP ব্যবহারের মাধ্যমে ডেটা এবং ফাংশনগুলিকে একত্রিত করে একটি উন্নত, মডুলার এবং পুনঃব্যবহারযোগ্য প্রোগ্রামিং কাঠামো তৈরি করা সম্ভব। ফোরট্রান 2003 থেকে এই ধারণাটি পূর্ণাঙ্গভাবে সমর্থিত, এবং এটি নতুন প্রোগ্রামিং পদ্ধতি আনার ক্ষেত্রে সহায়ক।


১. ক্লাস (Class)

ফোরট্রানে একটি Class হলো ডেটা এবং কার্যকলাপের একটি কাঠামো যা একত্রে রাখা হয়। ক্লাসে ভেরিয়েবল (প্রোপার্টি) এবং ফাংশন বা সাবরুটিন (মেথড) থাকে। এটি OOP-তে এনক্যাপসুলেশন এর একটি উদাহরণ, যেখানে ডেটা এবং কার্যকলাপ একত্রিত থাকে।

উদাহরণ:

MODULE vehicle_module
    TYPE(vehicle)
        CHARACTER(LEN=20) :: brand
        INTEGER :: year
    CONTAINS
        PROCEDURE :: set_details
        PROCEDURE :: display_details
    END TYPE vehicle

CONTAINS

    SUBROUTINE set_details(this, brand_name, model_year)
        CLASS(vehicle), INTENT(INOUT) :: this
        CHARACTER(LEN=20), INTENT(IN) :: brand_name
        INTEGER, INTENT(IN) :: model_year
        this%brand = brand_name
        this%year = model_year
    END SUBROUTINE set_details

    SUBROUTINE display_details(this)
        CLASS(vehicle), INTENT(IN) :: this
        PRINT *, 'Brand: ', this%brand
        PRINT *, 'Year: ', this%year
    END SUBROUTINE display_details

END MODULE vehicle_module

PROGRAM test_vehicle
    USE vehicle_module
    TYPE(vehicle) :: car

    CALL car%set_details('Toyota', 2020)
    CALL car%display_details()
END PROGRAM test_vehicle

এখানে:

  • vehicle নামক একটি ক্লাস তৈরি করা হয়েছে, যাতে দুটি সদস্য (properties): brand এবং year রয়েছে।
  • ক্লাসের মধ্যে দুটি method (set_details এবং display_details) রয়েছে, যা ক্লাসের ডেটা সেট এবং প্রদর্শন করবে।

আউটপুট:

Brand: Toyota
Year: 2020

২. ইনহেরিট্যান্স (Inheritance)

ফোরট্রানে ইনহেরিট্যান্স একটি ক্লাস থেকে অন্য ক্লাসের বৈশিষ্ট্য এবং কার্যকলাপের উত্তরাধিকার নেওয়ার প্রক্রিয়া। আপনি একটি বেস ক্লাস তৈরি করতে পারেন এবং সেই ক্লাসের বৈশিষ্ট্য অন্য ক্লাসে উত্তরাধিকারী হিসেবে ব্যবহার করতে পারেন।

উদাহরণ:

MODULE vehicle_module
    TYPE, PUBLIC :: vehicle
        CHARACTER(LEN=20) :: brand
        INTEGER :: year
    CONTAINS
        PROCEDURE :: set_details
        PROCEDURE :: display_details
    END TYPE vehicle

    TYPE, EXTENDS(vehicle) :: car
        CHARACTER(LEN=20) :: fuel_type
    CONTAINS
        PROCEDURE :: set_car_details
        PROCEDURE :: display_car_details
    END TYPE car

CONTAINS

    SUBROUTINE set_details(this, brand_name, model_year)
        CLASS(vehicle), INTENT(INOUT) :: this
        CHARACTER(LEN=20), INTENT(IN) :: brand_name
        INTEGER, INTENT(IN) :: model_year
        this%brand = brand_name
        this%year = model_year
    END SUBROUTINE set_details

    SUBROUTINE display_details(this)
        CLASS(vehicle), INTENT(IN) :: this
        PRINT *, 'Brand: ', this%brand
        PRINT *, 'Year: ', this%year
    END SUBROUTINE display_details

    SUBROUTINE set_car_details(this, fuel)
        CLASS(car), INTENT(INOUT) :: this
        CHARACTER(LEN=20), INTENT(IN) :: fuel
        this%fuel_type = fuel
    END SUBROUTINE set_car_details

    SUBROUTINE display_car_details(this)
        CLASS(car), INTENT(IN) :: this
        CALL this%display_details()
        PRINT *, 'Fuel Type: ', this%fuel_type
    END SUBROUTINE display_car_details

END MODULE vehicle_module

PROGRAM test_vehicle
    USE vehicle_module
    TYPE(car) :: my_car

    CALL my_car%set_details('Toyota', 2022)
    CALL my_car%set_car_details('Gasoline')
    CALL my_car%display_car_details()
END PROGRAM test_vehicle

এখানে:

  • car ক্লাস, vehicle ক্লাস থেকে ইনহেরিট করা হয়েছে।
  • car ক্লাসে অতিরিক্ত একটি সদস্য fuel_type এবং নতুন একটি মেথড set_car_details এবং display_car_details যোগ করা হয়েছে।

আউটপুট:

Brand: Toyota
Year: 2022
Fuel Type: Gasoline

৩. পলিমরফিজম (Polymorphism)

ফোরট্রানে পলিমরফিজম একটি ধারণা, যেখানে একটি ফাংশন বা সাবরুটিন একাধিকভাবে ব্যবহার করা যেতে পারে, যদিও তাদের প্যারামিটার বা কার্যকারিতা আলাদা হতে পারে। ফোরট্রানে এটি CLASS এবং EXTENDS কিওয়ার্ড ব্যবহার করে করা যায়।

উদাহরণ:

MODULE shape_module
    TYPE, ABSTRACT :: shape
    CONTAINS
        PROCEDURE :: area
    END TYPE shape

    TYPE, EXTENDS(shape) :: circle
        REAL :: radius
    CONTAINS
        PROCEDURE :: area
    END TYPE circle

    TYPE, EXTENDS(shape) :: rectangle
        REAL :: length, width
    CONTAINS
        PROCEDURE :: area
    END TYPE rectangle

CONTAINS

    FUNCTION area(this)
        CLASS(shape), INTENT(IN) :: this
        REAL :: area
        area = 0.0
    END FUNCTION area

    FUNCTION area(this)
        CLASS(circle), INTENT(IN) :: this
        REAL :: area
        area = 3.14159 * this%radius**2
    END FUNCTION area

    FUNCTION area(this)
        CLASS(rectangle), INTENT(IN) :: this
        REAL :: area
        area = this%length * this%width
    END FUNCTION area

END MODULE shape_module

PROGRAM test_shapes
    USE shape_module
    TYPE(circle) :: c
    TYPE(rectangle) :: r

    c%radius = 5.0
    r%length = 4.0
    r%width = 3.0

    PRINT *, 'Area of circle: ', area(c)
    PRINT *, 'Area of rectangle: ', area(r)
END PROGRAM test_shapes

এখানে:

  • Shape একটি অ্যাবস্ট্রাক্ট টাইপ (base class) হিসেবে কাজ করে, এবং circlerectangle এর মত দুইটি derived class তৈরি করা হয়েছে।
  • প্রতিটি ক্লাসে area ফাংশন পৃথকভাবে কাজ করে, তবে একই নামের ফাংশন ব্যবহার করা হয়েছে (পলিমরফিজম)।

আউটপুট:

Area of circle:  78.539750
Area of rectangle:  12.000000

৪. Encapsulation (এনক্যাপসুলেশন)

Encapsulation ফোরট্রানে ক্লাসের ভিতরের ডেটাকে একটি সীমাবদ্ধ পরিবেশে রাখতে এবং বাহ্যিক অ্যাক্সেস কন্ট্রোল করতে সহায়ক। এতে ডেটার নিরাপত্তা নিশ্চিত হয়, কারণ বাহ্যিক কোড সরাসরি ডেটা পরিবর্তন করতে পারে না।

উদাহরণ:

MODULE account_module
    TYPE, PUBLIC :: bank_account
        REAL :: balance
    CONTAINS
        PROCEDURE :: deposit
        PROCEDURE :: withdraw
        PROCEDURE :: get_balance
    END TYPE bank_account

CONTAINS

    SUBROUTINE deposit(this, amount)
        CLASS(bank_account), INTENT(INOUT) :: this
        REAL, INTENT(IN) :: amount
        this%balance = this%balance + amount
    END SUBROUTINE deposit

    SUBROUTINE withdraw(this, amount)
        CLASS(bank_account), INTENT(INOUT) :: this
        REAL, INTENT(IN) :: amount
        IF (this%balance >= amount) THEN
            this%balance = this%balance - amount


        ELSE
            PRINT *, 'Insufficient funds!'
        END IF
    END SUBROUTINE withdraw

    FUNCTION get_balance(this) RESULT(balance)
        CLASS(bank_account), INTENT(IN) :: this
        REAL :: balance
        balance = this%balance
    END FUNCTION get_balance

END MODULE account_module

PROGRAM test_account
    USE account_module
    TYPE(bank_account) :: my_account

    CALL my_account%deposit(500.0)
    CALL my_account%withdraw(200.0)

    PRINT *, 'Balance: ', my_account%get_balance()
END PROGRAM test_account

এখানে:

  • bank_account ক্লাসের ভিতরের ডেটা (যেমন ব্যালেন্স) শুধুমাত্র মেথডের মাধ্যমে অ্যাক্সেস এবং পরিবর্তন করা যায়।

আউটপুট:

Balance:  300.000000

উপসংহার

ফোরট্রানে Object-Oriented Programming (OOP) ধারণা ব্যবহার করে ডেটা এবং কার্যকলাপ একত্রিত করা যায়, যার মাধ্যমে কোড আরও মডুলার, পুনঃব্যবহারযোগ্য এবং রক্ষণাবেক্ষণযোগ্য হয়। ফোরট্রানে OOP এর মৌলিক ধারণাগুলি অন্তর্ভুক্ত রয়েছে:

  1. ক্লাস (Class): ডেটা এবং ফাংশনের সমন্বয়।
  2. ইনহেরিট্যান্স (Inheritance): এক ক্লাস থেকে অন্য ক্লাসের বৈশিষ্ট্য অর্জন।
  3. পলিমরফিজম (Polymorphism): একাধিক ফাংশন বা সাবরুটিনের ব্যবহার।
  4. এনক্যাপসুলেশন (Encapsulation): ডেটাকে সুরক্ষিত রাখা এবং বাহ্যিক অ্যাক্সেস নিয়ন্ত্রণ করা।

ফোরট্রানে OOP ব্যবহার করে আরও উন্নত, সংগঠিত এবং নির্ভুল কোড লেখা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...